home *** CD-ROM | disk | FTP | other *** search
/ PC Answers 1995 May / PC Answers CD-ROM 7 (Future Publishing) (May 1995).iso / vbits / code / robinson / kbnamcnv.txt < prev    next >
Encoding:
Text File  |  1994-08-16  |  29.7 KB  |  645 lines

  1. LONG: Microsoft Consulting Services Naming Conventions for VB [B_VBasic]
  2. ID: Q110264    CREATED: 17-JAN-1994   MODIFIED: 24-FEB-1994
  3. 2.00 3.00
  4. WINDOWS
  5. ENDUSER |
  6.  
  7. ---------------------------------------------------------------------
  8. The information in this article applies to:
  9.  
  10. - Standard and Professional Editions of Microsoft Visual Basic for
  11.   Windows, versions 2.0 and 3.0
  12. ---------------------------------------------------------------------
  13.  
  14. SUMMARY
  15. =======
  16.  
  17. It is a good idea to establish naming conventions for your Visual Basic
  18. code. This article gives you the naming conventions used by Microsoft
  19. Consulting Services (MCS).
  20.  
  21. This document is a superset of the Visual Basic coding conventions
  22. found in the Visual Basic "Programmer's Guide."
  23.  
  24. NOTE: The third-party controls mentioned in this article are manufactured
  25. by vendors independent of Microsoft. Microsoft makes no warranty, implied
  26. or otherwise, regarding these controls' performance or reliability.
  27.  
  28. MORE INFORMATION
  29. ================
  30.  
  31. Naming conventions help Visual Basic programmers:
  32.  
  33.  - Standardize the structure, coding style and logic of an application.
  34.  - Create precise, readable, and unambiguous source code.
  35.  - Be consistent with other language conventions (most importantly,
  36.    the Visual Basic Programmers Guide and standard Windows C Hungarian
  37.    notation).
  38.  - Be efficient from a string size and labor standpoint, thus
  39.    allowing a greater opportunity for longer and fuller object names.
  40.  - Define the minimal requirements necessary to do the above.
  41.  
  42. Setting Environment Options
  43. ---------------------------
  44.  
  45. Use Option Explicit. Declare all variables to save programming time by
  46. reducing the number of bugs caused by typos (for example, aUserNameTmp
  47. vs. sUserNameTmp vs. sUserNameTemp). In the Environment Options dialog, set
  48. Require Variable Declaration to Yes. The Option Explicit statement
  49. requires you to declare all the variables in your Visual Basic program.
  50.  
  51. Save Files as ASCII Text. Save form (.FRM) and module (.BAS) files as
  52. ASCII text to facilitate the use of version control systems and minimize
  53. the damage that can be caused by disk corruption. In addition, you can:
  54.  
  55.  - Use your own editor
  56.  - Use automated tools, such as grep
  57.  - Create code generation or CASE tools for Visual Basic
  58.  - Perform external analysis of your Visual Basic code
  59.  
  60. To have Visual Basic always save files as ASCII text, from the
  61. Environment Options dialog, set the Default Save As Format option to Text.
  62.  
  63. Object Naming Conventions for Standard Objects
  64. ----------------------------------------------
  65.  
  66. The following tables define the MCS standard object name prefixes.
  67. These prefixes are consistent with those documented in the Visual Basic
  68. version 3.0 Programmers Guide.
  69.  
  70. Prefix    Object Type                           Example
  71. ------------------------------------------------------------
  72. ani       Animation button                      aniMailBox
  73. bed       Pen Bedit                             bedFirstName
  74. cbo       Combo box and drop down list box      cboEnglish
  75. chk       Checkbox                              chkReadOnly
  76. clp       Picture clip                          clpToolbar
  77. cmd (3d)  Command button (3D)                   cmdOk (cmd3dOk)
  78. com       Communications                        comFax
  79. ctr       Control (when specific type unknown)  ctrCurrent
  80. dat       Data control                          datBiblio
  81. dir       Directory list box                    dirSource
  82. dlg       Common dialog control                 dlgFileOpen
  83. drv       Drive list box                        drvTarget
  84. fil       File list box                         filSource
  85. frm       Form                                  frmEntry
  86. fra (3d)  Frame (3d)                            fraStyle (fra3dStyle)
  87. gau       Gauge                                 gauStatus
  88. gpb       Group push button                     gpbChannel
  89. gra       Graph                                 graRevenue
  90. grd       Grid                                  grdPrices
  91. hed       Pen Hedit                             hedSignature
  92. hsb       Horizontal scroll bar                 hsbVolume
  93. img       Image                                 imgIcon
  94. ink       Pen Ink                               inkMap
  95. key       Keyboard key status                   keyCaps
  96. lbl       Label                                 lblHelpMessage
  97. lin       Line                                  linVertical
  98. lst       List box                              lstPolicyCodes
  99. mdi       MDI child form                        mdiNote
  100. mpm       MAPI message                          mpmSentMessage
  101. mps       MAPI session                          mpsSession
  102. mci       MCI                                   mciVideo
  103. mnu       Menu                                  mnuFileOpen
  104. opt (3d)  Option Button (3d)                    optRed (opt3dRed)
  105. ole       OLE control                           oleWorksheet
  106. out       Outline control                       outOrgChart
  107. pic       Picture                               picVGA
  108. pnl3d     3d Panel                              pnl3d
  109. rpt       Report control                        rptQtr1Earnings
  110. shp       Shape controls                        shpCircle
  111. spn       Spin control                          spnPages
  112. txt       Text Box                              txtLastName
  113. tmr       Timer                                 tmrAlarm
  114. vsb       Vertical scroll bar                   vsbRate
  115.  
  116. Object Naming Convention for Database Objects
  117. ---------------------------------------------
  118.  
  119. Prefix        Object Type          Example
  120. ---------------------------------------------------
  121. db            ODBC Database        dbAccounts
  122. ds            ODBC Dynaset object  dsSalesByRegion
  123. fdc           Field collection     fdcCustomer
  124. fd            Field object         fdAddress
  125. ix            Index object         ixAge
  126. ixc           Index collection     ixcNewAge
  127. qd            QueryDef object      qdSalesByRegion
  128. qry (suffix)  Query (see NOTE)     SalesByRegionQry
  129. ss            Snapshot object      ssForecast
  130. tb            Table object         tbCustomer
  131. td            TableDef object      tdCustomers
  132.  
  133. NOTE: Using a suffix for queries allows each query to be sorted with its
  134. associated table in Microsoft Access dialogs (Add Table, List Tables
  135. Snapshot).
  136.  
  137. Menu Naming Conventions
  138. -----------------------
  139.  
  140. Applications frequently use an abundance of menu controls. As a result,
  141. you need a different set of naming conventions for these controls. Menu
  142. control prefixes should be extended beyond the initial mnu label by adding
  143. an additional prefix for each level of nesting, with the final menu
  144. caption at the end of the name string. For example:
  145.  
  146. Menu Caption Sequence   Menu Handler Name
  147. -----------------------------------------
  148. Help.Contents           mnuHelpContents
  149. File.Open               mnuFileOpen
  150. Format.Character        mnuFormatCharacter
  151. File.Send.Fax           mnuFileSendFax
  152. File.Send.Email         mnuFileSendEmail
  153.  
  154. When this convention is used, all members of a particular menu group are
  155. listed next to each other in the object drop-down list boxes (in the code
  156. window and property window). In addition, the menu control names clearly
  157. document the menu items to which they are attached.
  158.  
  159. Naming Conventions for Other Controls
  160. -------------------------------------
  161.  
  162. For new controls not listed above, try to come up with a unique three
  163. character prefix. However, it is more important to be clear than to stick
  164. to three characters.
  165.  
  166. For derivative controls, such as an enhanced list box, extend the prefixes
  167. above so that there is no confusion over which control is really being
  168. used. A lower-case abbreviation for the manufacturer would also typically
  169. be added to the prefix. For example, a control instance created from the
  170. Visual Basic Professional 3D frame could uses a prefix of fra3d to avoid
  171. confusion over which control is really being used. A command button from
  172. MicroHelp could use cmdm to differentiate it from the standard command
  173. button (cmd).
  174.  
  175. Third Party Controls
  176. --------------------
  177.  
  178. Each third party control used in an application should be listed in the
  179. application's overview comment section, providing the prefix used for the
  180. control, the full name of the control, and the name of the software vendor:
  181.  
  182. Prefix    Control Type        Vendor
  183. ---------------------------------------
  184. cmdm      Command Button      MicroHelp
  185.  
  186. Variable and Routine Naming
  187. ---------------------------
  188.  
  189. Variable and function names have the following structure:
  190.  
  191. <prefix><body><qualifier><suffix>
  192.  
  193. Part          Description                                  Example
  194. ------------------------------------------------------------------------
  195. <prefix>      Describes the use and scope of the variable. iGetRecordNext
  196. <body>        Describes the variable.                      iGetNameFirst
  197. <qualifier>   Denotes a derivative of the variable.        iGetNameLast
  198. <suffix>      The optional Visual Basic type character.    iGetRecordNext%
  199.  
  200. Prefixes:
  201.  
  202. The following tables define variable and function name prefixes that are
  203. based on Hungarian C notation for Windows. These prefixes should be used
  204. with all variables and function names. Use of old Basic suffixes (such as
  205. %, &, #, etc.) are discouraged.
  206.  
  207. Variable and Function Name Prefixes:
  208.  
  209. Prefix    Converged    Variable Use         Data Type  Suffix
  210. -------------------------------------------------------------
  211. b         bln          Boolean              Integer    %
  212. c         cur          Currency - 64 bits   Currency   @
  213. d         dbl          Double - 64 bit      Double     #
  214.                        signed quantity
  215. dt        dat          Date and Time        Variant
  216. e         err          Error
  217. f         sng          Float/Single - 32    Single     !
  218.                        bit signed
  219.                        floating point
  220. h                      Handle               Integer    %
  221. i                      Index                Integer    %
  222. l         lng          Long - 32 bit        Long       &
  223.                        signed quantity
  224. n         int          Number/Counter       Integer    %
  225. s         str          String               String     $
  226. u                      Unsigned - 16 bit    Long       &
  227.                        unsigned quantity
  228.           udt          User-defined type
  229. vnt       vnt          Variant              Variant
  230. a                      Array
  231.  
  232. NOTE: the values in the Converged column represent efforts to pull
  233. together the naming standards for Visual Basic, Visual Basic for
  234. Applications, and Access Basic. It is likely that these prefixes will
  235. become Microsoft standards at some point in the near future.
  236.  
  237. Scope and Usage Prefixes:
  238.  
  239. Prefix         Description
  240. ---------------------------------------------------------------
  241. g              Global
  242. m              Local to module or form
  243. st             Static variable
  244. (no prefix)    Non-static variable, prefix local to procedure
  245. v              Variable passed by value (local to a routine)
  246. r              Variable passed by reference (local to a routine)
  247.  
  248. Hungarian notation is as valuable in Visual Basic as it is in C.
  249. Although the Visual Basic type suffixes do indicate a variable's data
  250. type, they do not explain what a variable or function is used for, or
  251. how it can be accessed.  Here are some examples:
  252.  
  253. iSend - Represents a count of the number of messages sent
  254. bSend - A Boolean flag defining the success of the last Send operation
  255. hSend - A Handle to the Comm interface
  256.  
  257. Each of these variable names tell a programmer something very different.
  258. This information is lost when the variable name is reduced to Send%.
  259. Scope prefixes such as g and m also help reduce the problem of name
  260. contention especially in multi-developer projects.
  261.  
  262. Hungarian notation is also widely used by Windows C programmers and
  263. constantly referenced in Microsoft product documentation and in industry
  264. programming books. Additionally, the bond between C programmers and
  265. programmers who use Visual Basic will become much stronger as the Visual
  266. C++ development system gains momentum. This transition will result in
  267. many Visual Basic programmers moving to C for the first time and many
  268. programmers moving frequently back and forth between both environments.
  269.  
  270. The Body of Variable and Routine Names
  271. --------------------------------------
  272.  
  273. The body of a variable or routine name should use mixed case and should
  274. be as long as necessary to describe its purpose. In addition, function
  275. names should begin with a verb, such as InitNameArray or CloseDialog.
  276.  
  277. For frequently used or long terms, standard abbreviations are
  278. recommended to help keep name lengths reasonable. In general, variable
  279. names greater than 32 characters can be difficult to read on VGA
  280. displays.
  281.  
  282. When using abbreviations, make sure they are consistent throughout the
  283. entire application.  Randomly switching between Cnt and Count within
  284. a project will lead to unnecessary confusion.
  285.  
  286. Qualifiers on Variable and Routine Names
  287. ----------------------------------------
  288.  
  289. Related variables and routines are often used to manage and manipulate a
  290. common object. In these cases, use standard qualifiers to label the
  291. derivative variables and routines. Although putting the qualifier after
  292. the body of the name might seem a little awkward (as in sGetNameFirst,
  293. sGetNameLast instead of sGetFirstName, sGetLastName), this practice will
  294. help order these names together in the Visual Basic editor routine lists,
  295. making the logic and structure of the application easier to understand.
  296.  
  297. The following table defines common qualifiers and their standard meaning:
  298.  
  299. Qualifier  Description (follows Body)
  300. -------------------------------------------------------------------------
  301. First      First element of a set.
  302. Last       Last element of a set.
  303. Next       Next element in a set.
  304. Prev       Previous element in a set.
  305. Cur        Current element in a set.
  306. Min        Minimum value in a set.
  307. Max        Maximum value in a set.
  308. Save       Used to preserve another variable that must be reset later.
  309. Tmp        A "scratch" variable whose scope is highly localized within the
  310.            code. The value of a Tmp variable is usually only valid across
  311.            a set of contiguous statements within a single procedure.
  312. Src        Source. Frequently used in comparison and transfer routines.
  313. Dst        Destination. Often used in conjunction with Source.
  314.  
  315. User Defined Types
  316. ------------------
  317.  
  318. Declare user defined types in all caps with _TYPE appended to the end of
  319. the symbol name. For example:
  320.  
  321.    Type CUSTOMER_TYPE
  322.       sName As String
  323.       sState As String * 2
  324.       lID as Long
  325.    End Type
  326.  
  327. When declaring an instance variable of a user defined type, add a prefix to
  328. the variable name to reference the type. For example:
  329.  
  330.    Dim custNew as CUSTOMER_TYPE
  331.  
  332. Naming Constants
  333. ----------------
  334.  
  335. The body of constant names should be UPPER_CASE with underscores (_)
  336. between words. Although standard Visual Basic constants do not include
  337. Hungarian information, prefixes like i, s, g, and m can be very useful in
  338. understanding the value and scope of a constant. For constant names,
  339. follow the same rules as variables.  For Example:
  340.  
  341.    mnUSER_LIST_MAX   ' Max entry limit for User list (integer value,
  342.                      ' local to module)
  343.    gsNEW_LINE        ' New Line character string (global to entire
  344.                      ' application)
  345.  
  346. Variant Data Type
  347. -----------------
  348.  
  349. If you know that a variable will always store data of a particular type,
  350. Visual Basic can handle that data more efficiently if you declare a
  351. variable of that type.
  352.  
  353. However, the variant data type can be extremely useful when working with
  354. databases, messages, DDE, or OLE. Many databases allow NULL as a valid
  355. value for a field. Your code needs to distinguish between NULL, 0 (zero),
  356. and "" (empty string). Many times, these types of operations can use a
  357. generic service routine that does not need to know the type of data it
  358. receives to process or pass on the data.
  359.  
  360. For example:
  361.  
  362.    Sub ConvertNulls(rvntOrg As Variant, rvntSub As Variant)
  363.       ' If rvntOrg = Null, replace the Null with rvntSub
  364.       If IsNull(rvntOrg) Then rvntOrg = rvntSub
  365.    End Sub
  366.  
  367. The are some drawbacks, however, to using variants. Code statements
  368. that use variants can sometimes be ambiguous to the programmer.
  369.  
  370. For example:
  371.  
  372.    vnt1 = "10.01" : vnt2 = 11 : vnt3 = "11" : vnt4 = "x4"
  373.    vntResult = vnt1 + vnt2  ' Does vntResult = 21.01 or 10.0111?
  374.    vntResult = vnt2 + vnt1  ' Does vntResult = 21.01 or 1110.01?
  375.    vntResult = vnt1 + vnt3  ' Does vntResult = 21.01 or 10.0111?
  376.    vntResult = vnt3 + vnt1  ' Does vntResult = 21.01 or 1110.01?
  377.    vntResult = vnt2 + vnt4  ' Does vntResult = 11x4 or ERROR?
  378.    vntResult = vnt3 + vnt4  ' Does vntResult = 11x4 or ERROR?
  379.  
  380. The above examples would be much less ambiguous and easier to read,
  381. debug, and maintain if the Visual Basic type conversion routines were
  382. used instead.
  383.  
  384. For Example:
  385.  
  386.    iVar1 = 5 + val(sVar2)   ' use this (explicit conversion)
  387.    vntVar1 = 5 + vntVar2    ' not this (implicit conversion)
  388.  
  389. Commenting Your Code
  390. --------------------
  391.  
  392. All procedures and functions should begin with a brief comment describing
  393. the functional characteristics of the routine (what it does). This
  394. description should not describe the implementation details (how it does
  395. it) because these often change over time, resulting in unnecessary comment
  396. maintenance work, or worse yet, erroneous comments. The code itself and
  397. any necessary in-line or local comments will describe the implementation.
  398.  
  399. Parameters passed to a routine should be described when their functions are
  400. not obvious and when the routine expects the parameters to be in a specific
  401. range. Function return values and global variables that are changed by the
  402. routine (especially through reference parameters) must also be described at
  403. the beginning of each routine.
  404.  
  405. Routine header comment blocks should look like this (see the next
  406. section "Formatting Your Code" for an  example):
  407.  
  408. Section    Comment Description
  409. ---------------------------------------------------------------------------
  410. Purpose    What the routine does (not how).
  411. Inputs     Each non-obvious parameter on a separate line with
  412.            in-line comments
  413. Assumes    List of each non-obvious external variable, control, open file,
  414.            and so on.
  415. Returns    Explanation of value returned for functions.
  416. Effects    List of each effected external variable, control, file, and
  417.            so on and the affect it has (only if this is not obvious)
  418.  
  419. Every non-trivial variable declaration should include an in-line comment
  420. describing the use of the variable being declared.
  421.  
  422. Variables, controls, and routines should be named clearly enough that in-
  423. line commenting is only needed for complex or non-intuitive
  424. implementation details.
  425.  
  426. An overview description of the application, enumerating primary data
  427. objects, routines, algorithms, dialogs, database and file system
  428. dependencies, and so on should be included at the start of the .BAS module
  429. that contains the project's Visual Basic generic constant declarations.
  430.  
  431. NOTE: The Project window inherently describes the list of files in a
  432. project, so this overview section only needs to provide information on
  433. the most important files and modules, or the files the Project window
  434. doesn't list, such as initialization (.INI) or database files.
  435.  
  436. Formatting Your Code
  437. --------------------
  438.  
  439. Because many programmers still use VGA displays, screen real estate must
  440. be conserved as much as possible, while still allowing code formatting
  441. to reflect logic structure and nesting.
  442.  
  443. Standard, tab-based, block nesting indentations should be two to four
  444. spaces. More than four spaces is unnecessary and can cause statements to
  445. be hidden or accidentally truncated. Less than two spaces does not
  446. sufficiently show logic nesting. In the Microsoft Knowledge Base, we
  447. use a three-space indent. Use the Environment Options dialog to set the
  448. default tab width.
  449.  
  450. The functional overview comment of a routine should be indented one
  451. space. The highest level statements that follow the overview comment
  452. should be indented one tab, with each nested block indented an
  453. additional tab.
  454.  
  455. For example:
  456.  
  457. '**************************************************************************
  458. 'Purpose:   Locate first occurrence of a specified user in UserList array.
  459. 'Inputs:    rasUserList():  the list of users to be searched
  460. '           rsTargetUser:   the name of the user to search for
  461. 'Returns:   the index of the first occurrence of the rsTargetUser
  462. '           in the rasUserList array. If target user not found, return -1.
  463. '**************************************************************************
  464. 'Enter the next two lines as one, single line:
  465. Function iFindUser (rasUserList() As String, rsTargetUser as String)
  466.    As Integer
  467.    Dim i As Integer           ' loop counter
  468.    Dim bFound As Integer      ' target found flag
  469.    iFindUser = -1
  470.    i = 0
  471.    While i <= Ubound(rasUserList) and Not bFound
  472.       If rasUserList(i) = rsTargetUser Then
  473.          bFound = True
  474.          iFindUser = i
  475.       End If
  476.    Wend
  477. End Function
  478.  
  479. Variables and non-generic constants should be grouped by function rather
  480. than by being split off into isolated areas or special files. Visual
  481. Basic generic constants such as HOURGLASS should be grouped in a single
  482. module (VB_STD.BAS) to keep them separate from application-specific
  483. declarations.
  484.  
  485. Operators
  486. ---------
  487.  
  488. Always use an ampersand (&) when concatenating strings, and use the plus
  489. sign (+) when working with numerical values. Using a plus sign (+) with
  490. nonnumerical values, may cause problems when operating on two variants.
  491.  
  492. For example:
  493.  
  494.    vntVar1 = "10.01"
  495.    vntVar2 = 11
  496.    vntResult = vntVar1 + vntVar2         ' vntResult =  21.01
  497.    vntResult = vntVar1 & vntVar2         ' vntResult = 10.0111
  498.  
  499. Scope
  500. -----
  501.  
  502. Variables should always be defined with the smallest scope possible.
  503. Global variables can create enormously complex state machines and make
  504. the logic of an application extremely difficult to understand. Global
  505. variables also make the reuse and maintenance of your code much more
  506. difficult.
  507.  
  508. Variables in Visual Basic can have the following scope:
  509.  
  510. Scope             Variable Declared In:            Visibility
  511. -------------------------------------------------------------------
  512. Procedure-level   Event procedure, sub, or         Visible in the
  513.                   function                         procedure in which
  514.                                                    it is declared
  515. Form-level,       Declarations section of a form   Visible in every
  516. Module-level      or code module (.FRM, .BAS)      procedure in the
  517.                                                    form or code
  518.                                                    module
  519. Global            Declarations section of a code   Always visible
  520.                   module (.BAS, using Global
  521.                   keyword)
  522.  
  523. In a Visual Basic application, only use global variables when there is
  524. no other convenient way to share data between forms. You may want to
  525. consider storing information in a control's Tag property, which can be
  526. accessed globally using the form.object.property syntax.
  527.  
  528. If you must use global variables, it is good practice to declare all of
  529. them in a single module and group them by function. Give the module a
  530. meaningful name that indicates its purpose, such as GLOBAL.BAS.
  531.  
  532. With the exception of global variables (which should not be passed),
  533. procedures and functions should only operate on objects that are passed
  534. to them. Global variables that are used in routines should be identified
  535. in the general comment area at the beginning of the routine. In addition,
  536. pass arguments to subs and functions using ByVal, unless you explicitly
  537. want to change the value of the passed argument.
  538.  
  539. Write modular code whenever possible. For example, if your application
  540. displays a dialog box, put all the controls and code required to perform
  541. the dialog's task in a single form. This helps to keep the application's
  542. code organized into useful components and minimizes its runtime overhead.
  543.  
  544. Third Party Controls
  545. --------------------
  546.  
  547. NOTE: The products discussed below are manufactured by vendors
  548. independent of Microsoft. Microsoft makes no warranty, implied or
  549. otherwise, regarding these products' performance or reliability.
  550.  
  551. The following table lists standard third party vendor name prefix
  552. characters to be used with control prefixes:
  553.  
  554. Vendor               Abbv
  555. -------------------------
  556. MicroHelp (VBTools)  m
  557. Pioneer Software     p
  558. Crescent Software    c
  559. Sheridan Software    s
  560. Other (Misc)         o
  561.  
  562. The following table lists standard third party control prefixes:
  563.  
  564. Control         Control     Abbr  Vendor     Example            VBX File
  565. Type            Name                                            Name
  566. ---------------------------------------------------------------------------
  567. Alarm           Alarm       almm  MicroHelp  almmAlarm          MHTI200.VBX
  568. Animate         Animate     anim  MicroHelp  animAnimate        MHTI200.VBX
  569. Callback        Callback    calm  MicroHelp  calmCallback       MHAD200.VBX
  570. Combo Box       DB_Combo    cbop  Pioneer    cbopComboBox       QEVBDBF.VBX
  571. Combo Box       SSCombo     cbos  Sheridan   cbosComboBox       SS3D2.VBX
  572. Check Box       DB_Check    chkp  Pioneer    chkpCheckBox       QEVBDBF.VBX
  573. Chart           Chart       chtm  MicroHelp  chtmChart          MHGR200.VBX
  574. Clock           Clock       clkm  MicroHelp  clkmClock          MHTI200.VBX
  575. Button          Command     cmdm  MicroHelp  cmdmCommandButton  MHEN200.VBX
  576.                 Button
  577. Button          DB_Command  cmdp  Pioneer    cmdpCommandButton  QEVBDBF.VBX
  578. Button (Group)  Command     cmgm  MicroHelp  cmgmBtton          MHGR200.VBX
  579.                 Button
  580.                 (multiple)
  581. Button          Command     cmim  MicroHelp  cmimCommandButton  MHEN200.VBX
  582.                 Button
  583.                 (icon)
  584. CardDeck        CardDeck    crdm  MicroHelp  crdmCard           MHGR200.VBX
  585. Dice            Dice        dicm  MicroHelp  dicmDice           MHGR200.VBX
  586. List Box (Dir)  SSDir       dirs  Sheridan   dirsDirList        SS3D2.VBX
  587. List Box (Drv)  SSDrive     drvs  Sheridan   drvsDriveList      SS3D2.VBX
  588. List Box (File) File List   film  MicroHelp  filmFileList       MHEN200.VBX
  589. List Box (File) SSFile      fils  Sheridan   filsFileList       SS3D2.VBX
  590. Flip            Flip        flpm  MicroHelp  flpmButton         MHEN200.VBX
  591. Scroll Bar      Form Scroll fsrm  MicroHelp  fsrmFormScroll     ???
  592. Gauge           Gauge       gagm  MicroHelp  gagmGauge          MHGR200.VBX
  593. Graph           Graph       gpho  Other      gphoGraph          XYGRAPH.VBX
  594. Grid            Q_Grid      grdp  Pioneer    grdpGrid           QEVBDBF.VBX
  595. Scroll Bar      Horizontal  hsbm  MicroHelp  hsbmScroll         MHEN200.VBX
  596.                 Scroll Bar
  597. Scroll Bar      DB_HScroll  hsbp  Pioneer    hsbpScroll         QEVBDBF.VBX
  598. Graph           Histo       hstm  MicroHelp  hstmHistograph     MHGR200.VBX
  599. Invisible       Invisible   invm  MicroHelp  invmInvisible      MHGR200.VBX
  600. List Box        Icon Tag    itgm  MicroHelp  itgmListBox        MHAD200.VBX
  601. Key State       Key State   kstm  MicroHelp  kstmKeyState       MHTI200.VBX
  602. Label           Label (3d)  lblm  MicroHelp  lblmLabel          MHEN200.VBX
  603. Line            Line        linm  MicroHelp  linmLine           MHGR200.VBX
  604. List Box        DB_List     lstp  Pioneer    lstpListBox        QEVBDBF.VBX
  605. List Box        SSList      lsts  Sheridan   lstsListBox        SS3D2.VBX
  606. MDI Child       MDI Control mdcm  MicroHelp  mdcmMDIChild       ???
  607. Menu            SSMenu      mnus  Sheridan   mnusMenu           SS3D3.VBX
  608. Marque          Marque      mrqm  MicroHelp  mrqmMarque         MHTI200.VB
  609. Picture         OddPic      odpm  MicroHelp  odpmPicture        MHGR200.VBX
  610. Picture         Picture     picm  MicroHelp  picmPicture        MHGR200.VBX
  611. Picture         DB_Picture  picp  Pioneer    picpPicture        QEVBDBF.VBX
  612. Property Vwr    Property    pvrm  MicroHelp  pvrmPropertyViewer MHPR200.VBX
  613.                 Viewer
  614. Option (Group)  DB_RadioGroup radp Pioneer   radqRadioGroup     QEVBDBF.VBX
  615. Slider          Slider      sldm  MicroHelp  sldmSlider         MHGR200.VBX
  616. Button (Spin)   Spinner     spnm  MicroHelp  spnmSpinner        MHEN200.VBX
  617. Spreadsheet     Spreadsheet sprm  MicroHelp  sprmSpreadsheet    MHAD200.VBX
  618. Picture         Stretcher   strm  MicroHelp  strmStretcher      MHAD200.VBX
  619. Screen Saver    Screen Saver svrm MicroHelp  svrmSaver          MHTI200.VBX
  620. Switcher        Switcher    swtm  MicroHelp  swtmSwitcher       ???
  621. List Box        Tag         tagm  MicroHelp  tagmListBox        MHEN200.VBX
  622. Timer           Timer       tmrm  MicroHelp  tmrmTimer          MHTI200.VBX
  623. ToolBar         ToolBar     tolm  MicroHelp  tolmToolBar        MHAD200.VBX
  624. List Box        Tree        trem  MicroHelp  tremTree           MHEN200.VBX
  625. Input Box       Input (Text) txtm MicroHelp  inpmText           MHEN200.VBX
  626. Input Box       DB_Text     txtp  Pioneer    txtpText           QEVBDBF.VBX
  627. Scroll Bar      Vertical    vsbm  MicroHelp  vsbmScroll         MHEN200.VBX
  628.                 Scroll Bar
  629. Scroll Bar      DB_VScroll  vsbp  Pioneer    vsbpScroll         QEVBDBF.VBX
  630.  
  631. Additional reference words: 2.00 3.00
  632. KBCategory:
  633. KBSubcategory: PrgOther RefsDoc
  634. \*
  635. \* MSINTERNAL:
  636. \* Originally written by Rick Hargrove who gave his permission to
  637. \* publish it in the KB.
  638. \*
  639. \* MSINTERNAL: TLC Feb 1994
  640. \* This article is in the FastTips Technical Library. DO NOT DELETE
  641. \* THIS ARTICLE. Contact your KBL if you have questions.
  642. ====================================================================== =========
  643. Created_by: KAYDA      Edit_review: KAYDA     Edited: 19-JAN-1994
  644. Modified_by: MINF      Tech_review: KAYDA     Reviewed: 19-JAN-1994
  645.